#include <stdio.h>
#include <stdlib.h>

int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
    // 动态分配返回结果数组
    int* result = (int*)malloc(2 * sizeof(int));
    
    // 哈希表存储：元素值 -> 索引
    // 使用哈希表的大小为 numsSize 来存储索引
    // 由于元素值范围不确定，我们直接使用一个数组来模拟哈希表
    // 可以根据需要更改哈希表的大小。
    int* hashTable = (int*)malloc(numsSize * sizeof(int));
    
    // 初始化哈希表
    for (int i = 0; i < numsSize; i++) {
        hashTable[i] = -1;  // 初始值为 -1，表示该位置未使用
    }

    // 遍历数组
    for (int i = 0; i < numsSize; i++) {
        int complement = target - nums[i];  // 计算目标值和当前元素的差值
        
        // 遍历查找差值在哈希表中的位置
        for (int j = 0; j < i; j++) {
            if (nums[j] == complement) {
                result[0] = j;  // 差值所在的索引
                result[1] = i;  // 当前元素的索引
                *returnSize = 2;
                free(hashTable);
                return result;
            }
        }
        
        // 将当前元素存入哈希表
        hashTable[i] = nums[i];
    }

    // 如果没有找到，返回 NULL
    *returnSize = 0;
    free(hashTable);
    return NULL;
}
int main() {
    int nums[] = {1, 6142, 8192, 10239};
    int numsSize = 4;
    int target = 18431;
    int returnSize = 0;
    
    // 调用 twoSum 函数
    int* result = twoSum(nums, numsSize, target, &returnSize);    
    if (result != NULL) {
        printf("索引: %d, %d\n", result[0], result[1]);
        free(result);  // 释放内存
    } else {
        printf("没有找到符合条件的元素对。\n");
    }
    
    return 0;
}